package nl.hu.vakantievibes.ui;

import java.util.ArrayList;

import nl.hu.vakantievibes.client.ServerCall;
import nl.hu.vakantievibes.client.Systeem;
import nl.hu.vakantievibes.domain.Carpool;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class UitnodigingenAccepteren
{
	VerticalPanel vp;
	HorizontalPanel hp, hp2;
	Label lblBericht, lblNaam, naamLabel2, naamLabel3, naamLabel5;
	Button btnAccepteren, btnWeigeren;

	public UitnodigingenAccepteren() {

	}

	public VerticalPanel createPage() {
		vp = new VerticalPanel();
		hp2 = new HorizontalPanel();
		naamLabel2 = new Label("Persoon:");
		naamLabel2.addStyleName("labelstyle2a");
		naamLabel2.setWidth("100px");
		
		naamLabel3 = new Label("Bericht:");
		naamLabel3.addStyleName("labelstyle2a");
		naamLabel3.setWidth("721px");
		
		naamLabel5 = new Label("Actie:");
		naamLabel5.addStyleName("labelstyle2a");

		hp2.add(naamLabel2);
		hp2.add(naamLabel3);
		hp2.add(naamLabel5);
		vp.add(hp2);

		getCarpools();
		return vp;
	}

	public void getCarpools(){	
		AsyncCallback<ArrayList<Carpool>> callback = new AsyncCallback<ArrayList<Carpool>>() {
			@Override
			public void onFailure(Throwable caught) {
				NotificationManager.get().createNotification("Er is een server fout opgetreden. De reizen konden niet worden opgehaald van de server.");
				GWT.log(caught.getMessage());
				caught.printStackTrace();
			}
			@Override
			public void onSuccess(ArrayList<Carpool> result) {
				if(result.size() == 0){
					NotificationManager.get().createNotification("Er zijn nog geen uitnodigingen ontvangen.");
				}else{
					for(final Carpool c : result){
						if(c.getStatus().equals("Ongelezen")){
							hp = new HorizontalPanel();
							hp.setHeight("50px");
							lblNaam = new Label(c.getPassagier().getGebruikersNaam()); 
							lblNaam.addStyleName("labelstyle1Carpool");
							lblNaam.setWidth("94px");
							
							lblBericht = new Label(c.getBericht());
							lblBericht.addStyleName("whitespaceBericht");

							btnAccepteren = new Button("Accepteren");
							btnAccepteren.addClickHandler(new ClickHandler() {
								@Override
								public void onClick(ClickEvent event) {
									setStatus(c, "Geaccepteerd");
								}
							});

							btnWeigeren = new Button("Weigeren");
							btnWeigeren.addClickHandler(new ClickHandler() {
								@Override
								public void onClick(ClickEvent event) {
									setStatus(c, "Geweigerd");
								}
							});

							hp.add(lblNaam);
							hp.add(lblBericht);
							hp.add(btnAccepteren);
							hp.add(btnWeigeren);
							vp.add(hp);
						}
					}
				}
			}
		};
		new ServerCall().getAlleCarpools(Systeem.get().getGebruiker(), callback);
	}
	public void setStatus(Carpool c, String status) {
		AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				NotificationManager.get().createNotification("Er is een server fout opgetreden. De status kon niet worden veranderd.");
				GWT.log(caught.getMessage());
				caught.printStackTrace();
			}
			@Override
			public void onSuccess(Boolean result) {
				if(result) {
					NotificationManager.get().createNotification("De status van de aanvraag is succesvol gewijzigd.");
				} else {
					NotificationManager.get().createNotification("Er is geen plaats meer in uw auto.");
				}
				History.newItem("mijnboekingen");				
			}
		};
		new ServerCall().setCarpoolStatus(c, status, callback);
	}

}